// src/main/modules/windowManager.js
// 窗口管理模块
// 负责创建、配置和管理 Electron 浏览器窗口

import { BrowserWindow, shell } from 'electron'
import { join } from 'path'
import { is } from '@electron-toolkit/utils'

// 存储对主窗口的引用，防止被垃圾回收
let mainWindow = null

/**
 * 创建主浏览器窗口
 */
export function createWindow() {
  // 构建图标文件的绝对路径
  // __dirname 是当前模块所在的目录 (src/main/modules)
  // 因此需要向上两级 (../..) 到达项目根目录，然后进入 resources
  const iconPath = join(__dirname, '../../resources/icon.png')

  // 创建浏览器窗口实例
  mainWindow = new BrowserWindow({
    width: 900,
    height: 670,
    show: false, // 先隐藏，等页面加载完成再显示
    autoHideMenuBar: true, // 自动隐藏菜单栏
    // 为 Linux 系统设置图标 (如果文件存在)
    ...(process.platform === 'linux' ? { icon: iconPath } : {}),
    webPreferences: {
      // 指定预加载脚本
      preload: join(__dirname, '../preload/index.js'),
      // 禁用沙箱模式 (根据项目需要设置)
      sandbox: false
    }
  })

  // 当窗口内容加载完成并准备显示时触发
  mainWindow.on('ready-to-show', () => {
    // 显示窗口
    mainWindow?.show()
  })

  // 处理窗口内部链接的打开方式
  mainWindow.webContents.setWindowOpenHandler((details) => {
    // 在系统默认浏览器中打开外部链接
    shell.openExternal(details.url)
    // 阻止 Electron 内部打开新窗口
    return { action: 'deny' }
  })

  // 根据开发或生产环境加载不同的内容
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    // 开发环境：加载 Vite 开发服务器的 URL
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    // 生产环境：加载打包后的本地 HTML 文件
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  }
}

/**
 * 获取主窗口实例
 * @returns {BrowserWindow | null} 主窗口实例或 null
 */
export function getMainWindow() {
  return mainWindow
}

/**
 * 关闭主窗口
 */
export function closeMainWindow() {
  if (mainWindow) {
    mainWindow.close()
    mainWindow = null
  }
}
